﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CBE.UI.Control.Views;
using CBE.Services;
using CBE.Model;

namespace CBE.UI.Control.Presenters
{
    public class CronogramaTurnosPresenter
    {
        public ICronogramaTurnosView View { get; set; }

        public DateTime Date { get; set; }

        public CronogramaTurnosPresenter(ICronogramaTurnosView view, DateTime date) 
        {
            this.View = view;
            this.Date = date;

            this.LoadTurnos();
        }

        private void LoadTurnos()
        {
            AdministrarTurnosService service = new AdministrarTurnosService();

            List<Turnos> turnos = service.ReadEntitiesByCritera(new CBE.Model.Entities.AdministrarTurnosCriteria
            {
                Fecha = Date
            });

            this.LoadTurnos(turnos);

        }

        private void LoadTurnos(List<Turnos> turnos)
        {
            foreach (var item in turnos)
            {
                this.View.AddAppointment(
                    GetTitle(item),
                    GetSummary(item),
                    GetStartDate(item),
                    GetEndDate(item));
            }
        }

        private string GetTitle(Turnos item)
        {
            StringBuilder summary = new StringBuilder();

            summary.AppendFormat("Turno Número: {0}. ", item.Numero);
            summary.Append("Cliente: ");
            summary.Append(item.Clientes.NombreApellidoCompleto);

            return summary.ToString();
        }

        private string GetSummary(Turnos item)
        {
            StringBuilder summary = new StringBuilder();

            summary.Append(String.Format("Servicio: {0}-{1}. ", item.Servicios.Codigo, item.Servicios.Descripcion));
            summary.Append(String.Format("Empleado: {0}", item.Empleados.NombreApellidoCompleto));

            return summary.ToString();
        }

        private DateTime GetStartDate(Turnos item)
        {
            return new DateTime(item.Fecha.Year, item.Fecha.Month, item.Fecha.Day, item.Hora.Hours, item.Hora.Minutes, item.Hora.Seconds);
        }

        private DateTime GetEndDate(Turnos item)
        {
            var horaFin = item.Hora.Add(item.Servicios.DuracionAproximada);
            return new DateTime(item.Fecha.Year, item.Fecha.Month, item.Fecha.Day, horaFin.Hours, horaFin.Minutes, horaFin.Seconds);
        }

    }
}
